package com.bj58.mis.apm.server.statistics.service;

import com.bj58.mis.apm.server.core.common.result.Page;
import com.bj58.mis.apm.server.statistics.dto.chart.ChartData;
import com.bj58.mis.apm.server.statistics.dto.query.QueryDataGridItem;
import com.bj58.mis.apm.server.statistics.dto.query.Statistics;


public interface QueryService {
    /**
     * 查询统计信息
     *
     * @param username  用户名称
     * @param projectId 项目ID
     * @param cubeId    cubeId
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public Statistics statistics(String username, String projectId, String cubeId, String startDate, String endDate);

    /**
     * 获取每天的查询次数
     *
     * @param username  用户名
     * @param projectId 项目ID
     * @param cubeId    cubeID
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public ChartData queryCount(String username, String projectId, String cubeId, String startDate, String endDate);

    /**
     * 获取查询时间相应的分布
     *
     * @param username  用户名
     * @param projectId 项目ID
     * @param cubeId    cubeId
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public ChartData queryTimeData(String username, String projectId, String cubeId, String startDate, String endDate);

    /**
     * 获取历史查询的时间和耗时
     *
     * @param md5       sql和cubeId联合计算的MD5值
     * @param state     状态.1表示成功执行的SQL;0表示执行失败的SQL
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public ChartData queryHistory(String md5, String state, String startDate, String endDate);

    /**
     * 获取查询列表中某条记录的信息
     *
     * @param md5       sql和cubeId联合计算的MD5值
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public QueryDataGridItem queryDataGridItem(String md5, String startDate, String endDate,String state);

    /**
     * 查询列表
     *
     * @param username  用户名
     * @param projectId 项目ID
     * @param cubeId    cubeId
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param user      负责人
     * @param state     状态.1表示成功执行的SQL;0表示执行失败的SQL
     * @param searchKey 搜索的内容.可以是项目名称,也可以是cube名称
     * @param orderBy   排序的字段
     * @param sort      排序的方向。asc或者是desc
     * @param page      分页的偏移量
     * @param limit     每页的记录数
     * @return
     */
    public Page<QueryDataGridItem> queryDataGrid(String username, String projectId, String cubeId, String startDate, String endDate, String user, String state, String searchKey, String orderBy, String sort, Integer page, Integer limit);

    /**
     * 查询每天的百分位数
     *
     * @param username  用户名
     * @param projectId 项目ID
     * @param cubeId    cubeId
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @return
     */
    public ChartData queryPercentile(String username, String projectId, String cubeId, String startDate, String endDate);
}
